// 参考网站：https://segmentfault.com/a/1190000007665361
// 只能实现get请求，在script标签内执行，传入参数以及回调函数，
// 服务端在接收到请求以及回调参数之后，返回带有参数的回调函数，
// 前端收到之后执行回调函数
/**
 * 手写jsonp并返回promise对象
 * @param {*} url 请求的URL
 * @param {*} data 请求参数
 * @param {*} callback 回调函数
 */
function jsonp(url, data, callback = 'callback') {
    data.callback = callback
    let params = [];
    for (var key in data) {
        params.push(key + '=' + data[key])
    }
    const _script = document.createElement('script');
    _script.src = url + '?' + params.join('&')
    document.body.appendChild(_script);
    return new Promise((resolve, reject) => {
        window['callback'] = (data) => {
            try {
                resolve(data)
            } catch (e) {
                reject(e)
            }
        }
    }).finally(() => {
        _script.parentNode.removeChild(_script);
    })
}

jsonp('http://baidu.com', {
    page: 1,
    pageSize: 10
}, 'callbackFn').then(data => {
    console.log(data)
})